package br.com.velp.vskygeo.dto;

import br.com.velp.vskygeo.util.DateTimeUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

/**
 *
 * @author Eduardo
 */
public class OcorrenciaResultadoConsultaDTO implements InterfaceDTO {
    
    private int idOcorrencia;
    private int idMonitorado;
    private int numeroLogradouro;
    private double latitude;
    private double longitude;
    private double latitudeMonitorado;
    private double longitudeMonitorado;
    private short statusMonitorado;
    private String descricaoMonitorado;
    private String serialEquipamento;
    private String numeroOcorrencia;
    private String descricaoTipoAtendimento;
    private String motivo;
    private String observacao;
    private String paciente;
    private String logradouro;
    private String bairro;
    private String telefoneSolicitante;
    private String logradouroReferencia;
    private String cidade;
    private String uf;
    private String sexo;
    private String codigoOcorrencia;
    private Date dataCriacao;

    public int getIdMonitorado() {
        return idMonitorado;
    }

    public void setIdMonitorado(int idMonitorado) {
        this.idMonitorado = idMonitorado;
    }

    public int getNumeroLogradouro() {
        return numeroLogradouro;
    }

    public void setNumeroLogradouro(int numeroLogradouro) {
        this.numeroLogradouro = numeroLogradouro;
    }

    public short getStatusMonitorado() {
        return statusMonitorado;
    }

    public void setStatusMonitorado(short statusMonitorado) {
        this.statusMonitorado = statusMonitorado;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public double getLatitudeMonitorado() {
        return latitudeMonitorado;
    }

    public void setLatitudeMonitorado(double latitudeMonitorado) {
        this.latitudeMonitorado = latitudeMonitorado;
    }

    public double getLongitudeMonitorado() {
        return longitudeMonitorado;
    }

    public void setLongitudeMonitorado(double longitudeMonitorado) {
        this.longitudeMonitorado = longitudeMonitorado;
    }

    public String getDescricaoMonitorado() {
        return descricaoMonitorado;
    }

    public void setDescricaoMonitorado(String descricaoMonitorado) {
        this.descricaoMonitorado = descricaoMonitorado;
    }

    public String getSerialEquipamento() {
        return serialEquipamento;
    }

    public void setSerialEquipamento(String serialEquipamento) {
        this.serialEquipamento = serialEquipamento;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getCodigoOcorrencia() {
        return codigoOcorrencia;
    }

    public void setCodigoOcorrencia(String codigoOcorrencia) {
        this.codigoOcorrencia = codigoOcorrencia;
    }

    public Date getDataCriacao() {
        return DateTimeUtils.getDateTimeGmtBrasil(dataCriacao);
    }
    
    public String getDataCriacaoStr() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        return sdf.format(DateTimeUtils.getDateTimeGmtBrasil(dataCriacao));
    }

    public void setDataCriacao(Date dataCriacao) {
        this.dataCriacao = dataCriacao;
    }

    public String getDescricaoTipoAtendimento() {
        return descricaoTipoAtendimento;
    }

    public void setDescricaoTipoAtendimento(String descricaoTipoAtendimento) {
        this.descricaoTipoAtendimento = descricaoTipoAtendimento;
    }

    public int getIdOcorrencia() {
        return idOcorrencia;
    }

    public void setIdOcorrencia(int idOcorrencia) {
        this.idOcorrencia = idOcorrencia;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getLogradouroReferencia() {
        return logradouroReferencia;
    }

    public void setLogradouroReferencia(String logradouroReferencia) {
        this.logradouroReferencia = logradouroReferencia;
    }

    public String getMotivo() {
        return motivo;
    }

    public void setMotivo(String motivo) {
        this.motivo = motivo;
    }

    public String getNumeroOcorrencia() {
        return numeroOcorrencia;
    }

    public void setNumeroOcorrencia(String numeroOcorrencia) {
        this.numeroOcorrencia = numeroOcorrencia;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public String getPaciente() {
        return paciente;
    }

    public void setPaciente(String paciente) {
        this.paciente = paciente;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getTelefoneSolicitante() {
        return telefoneSolicitante != null ? Pattern.compile("(\\d{0})(\\d{2})(\\d{4})").matcher(telefoneSolicitante).replaceAll("$1($2)$3-") : null;
    }

    public void setTelefoneSolicitante(String telefoneSolicitante) {
        this.telefoneSolicitante = telefoneSolicitante;
    }

    public String getUf() {
        return uf;
    }

    public void setUf(String uf) {
        this.uf = uf;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final OcorrenciaResultadoConsultaDTO other = (OcorrenciaResultadoConsultaDTO) obj;
        if (this.idOcorrencia != other.idOcorrencia && this.idOcorrencia != other.idOcorrencia) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 83 * hash + this.idOcorrencia;
        return hash;
    }

    @Override
    public Map<String, Object> getMapaInformacao() {
        
        Map<String, Object> mapaInformacao = new HashMap<String, Object>();
        
        mapaInformacao.put("idOcorrencia", getIdOcorrencia());
        mapaInformacao.put("idMonitorado", getIdMonitorado());
        mapaInformacao.put("latitude", getLatitude());
        mapaInformacao.put("longitude", getLongitude());
        mapaInformacao.put("statusMonitorado", getStatusMonitorado());
        mapaInformacao.put("descricaoMonitorado", getDescricaoMonitorado());
        mapaInformacao.put("serialEquipamento", getSerialEquipamento());
        mapaInformacao.put("numeroLogradouro", getNumeroLogradouro());
        mapaInformacao.put("numeroOcorrencia", getNumeroOcorrencia());
        mapaInformacao.put("descricaoTipoAtendimento", getDescricaoTipoAtendimento());
        mapaInformacao.put("motivo", getMotivo());
        mapaInformacao.put("observacao", getObservacao());
        mapaInformacao.put("paciente", getPaciente());
        mapaInformacao.put("logradouro", getLogradouro());
        mapaInformacao.put("bairro", getBairro());
        mapaInformacao.put("telefoneSolicitante", getTelefoneSolicitante());
        mapaInformacao.put("logradouroReferencia", getLogradouroReferencia());
        mapaInformacao.put("cidade", getCidade());
        mapaInformacao.put("uf", getUf());
        mapaInformacao.put("sexo", getSexo());
        mapaInformacao.put("codigoOcorrencia", getCodigoOcorrencia());
        mapaInformacao.put("dataCriacao", getDataCriacaoStr());
        
        return mapaInformacao;
        
    }

    @Override
    public String getTipoInformacao() {
        return "OCORRENCIA";
    }
    
}
